# -*- coding: utf-8 -*-

import time
import GUI.gui
import wx
from wx.lib.wordwrap import wordwrap

class MainView():
    # @type frame GUI.gui.frame_main
    frame = None
    controller = None
    
    # @type loginDialog GUI.gui.dialog_login
    loginDialog = None

    progressDialog = None
    progressMax = 0

    def __init__(self, controller, frame):
        self.frame = frame
        self.controller = controller

        self.frame.Bind(wx.EVT_MENU, controller.exitAction, frame.menu_fileExit)
        self.frame.Bind(wx.EVT_CLOSE, self.onClose)
        self.frame.Bind(wx.EVT_MENU, controller.syncAction, frame.menu_fileSync)
        self.frame.Bind(wx.EVT_MENU, controller.aboutAction, frame.menu_helpAbout)

        self.loginDialog = GUI.gui.dialog_login(self.frame)
        self.loginDialog.SetAffirmativeId(self.loginDialog.button_ok.GetId())
        self.loginDialog.SetEscapeId(self.loginDialog.button_cancel.GetId())

    def onClose(self, event):
        veto = self.controller.beforeExitAction(event.CanVeto())
        if event.CanVeto() is False or veto is False:
            self.frame.Destroy()

        else:
            event.Veto(True)

    def showExitConfirmDialog(self):
        dialog = wx.MessageDialog(self.frame, u"Některé provedené změny nebyly dosud odeslány na server. Přejete si skutečně ukončit program?", u"Opravdu ukončit?", wx.YES_NO | wx.ICON_EXCLAMATION)
        return dialog.ShowModal() == wx.ID_YES

    def setStatus(self, status):
        self.frame.SetStatusText(status)

    def showError(self, error):
        dialog = wx.MessageDialog(self.frame, error, u"Chyba", wx.OK | wx.ICON_EXCLAMATION)
        dialog.ShowModal()

    def getUserData(self):
        result = self.loginDialog.ShowModal()
        if result == self.loginDialog.button_ok.GetId():
            ret = {}
            ret["login"] = self.loginDialog.text_login.GetValue()
            ret["password"] = self.loginDialog.text_password.GetValue()
            return ret
        else:
            return None

    def showAboutBox(self):
        info = wx.AboutDialogInfo()
        info.Name = u"Poznámkový blok o knihách"
        info.Version = "0.5"
        info.Description =  wordwrap(u"Program umožňující vytvářet a sdílet poznámky k textovým publikacím. "
                            u"Pro synchronizaci je využíváno Google Docs API, pro grafické rozhraní knihovna wxPython",
                            350, wx.ClientDC(self.frame))
        info.WebSite = ("http://code.google.com/p/poznamkovy-blok-o-knihach/", u"Domovská stránka projektu")
        info.Developers = [ u"Jiří Kulovaný",
                            u"Petr Egert",
                            u"Markéta Štětovská",
                            u"Michal Lom",
                            u"Vojtěch Hovorka",
                            u"Tomáš Koldcister",
                            u"Jindřích Kovář"]

        info.Licence = wordwrap(u"Kód projektu je chráněn licencí Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n\n"
                                u"Licence knihovny wxWidgets je dostupná na adrese http://www.wxwidgets.org/about/newlicen.htm\n\n"
                                u"Google Docs API je chráněno licencí Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)\n\n",
                                500, wx.ClientDC(self.frame))

        wx.AboutBox(info)

    def showProgressDialog(self, maximum):
        self.progressDialog = wx.ProgressDialog(u"Synchronizace", u"Provádím synchronizaci dat", maximum)
        self.progressMax = maximum

    def hideProgressDialog(self):
        if self.progressDialog is not None:
            self.progressDialog.Update(self.progressMax)
            self.progressDialog = None

    def updateProgressDialog(self, value):
        if self.progressDialog is not None:
            self.progressDialog.Update(value)